#version 130

// Las matrices de transformaciones
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
uniform mat4 projectionMatrix;

// Los datos para la iluminacion
uniform mat3 normalMatrix;
uniform vec3 direccionLuz;

// Para el shadow map
uniform mat4 shadowDephMVP;

// Lo que pasa al fragment shader
out vec3 normal;
out vec3 luzDir_viewSpace;
out vec3 vertexPos_viewSpace;
out vec4 vertexPos_shadowSpace;


void main(){
	// Se necesitan las normales interpoladas, por eso las paso al fragment shader
	normal = normalize( normalMatrix * gl_Normal );

	// Calcula la posicion del vertice
	gl_Position = projectionMatrix * viewMatrix * modelMatrix * gl_Vertex;

	// Para la componente especular de la luz se necesitan dos vectores

	// V: Une el vertice con el punto de vista en "View space"
	vertexPos_viewSpace = vec3(0, 0, 0) - ( viewMatrix * modelMatrix * gl_Vertex ).xyz;

	// L: La direccion de la luz en "View space"
	luzDir_viewSpace = normalize( viewMatrix * vec4(direccionLuz, 0.0) ).xyz;

	// El vertice visto desde el punto de la fuente de luz
	vertexPos_shadowSpace = shadowDephMVP * gl_Vertex;
}


